In known distributed software applications, software components are distributed among a plurality of executables (i.e., software capsules or software entities). Each of the executables contains one or more software components that perform some portion of the functionality of the distributed software application. For distributed software applications to work, the software components need to interact with each other. Many software components comprise dependency relationships with other software components of the distributed software application. When a failure of a software component occurs, other software components may be affected. For example, if a first software component is dependent on a second software component, a failure of the second software component will affect the first software component. Recovery of the second software component must also take the dependency of the first software component into account. For example, the first software component may need to be restarted once the second software component has been recovered. In known distributed software applications, the first and second software components handle the recovery of the first and second software components.
As one shortcoming, a software developer must create extra software within the first and second software components to perform the recovery. As another shortcoming, the first and second software components may not know of other potential problems within the distributed software application, for example, a faulty processor or communication link.
Thus, a need exists to alleviate software components of the responsibility of recovery of software components with consideration for dependency relationships between the software components.